package com.arpa.oms.service;

import com.arpa.oms.domain.dto.OmsReceivableDTO;
import com.arpa.oms.domain.dto.OmsSettlementEditDTO;
import com.arpa.oms.domain.entity.OmsReceivable;
import com.arpa.oms.domain.enums.PayableAndReceivableStatusEnum;
import com.arpa.oms.domain.vo.OmsReceivableVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * OMS收款单 服务类
 * </p>
 *
 * @author LEO
 * @since 2020-11-17
 */
public interface IOmsReceivableService extends IService<OmsReceivable> {

    /**
     * 保存
     * @param entity
     * @return
     */
    @Override
    boolean save(OmsReceivable entity);

    /**
     * 根据code更新实体
     * @param entity
     * @return
     */
    int updateByCode(OmsReceivable entity);

    /**
     * 查询列表
     * @param omsReceivableDTO
     * @return
     */
    List<OmsReceivableVO> queryList(OmsReceivableDTO omsReceivableDTO);

    /**
     * 查询合计,包含总数
     * @param omsReceivableDTO
     * @return
     */
    OmsReceivableVO queryListSum(OmsReceivableDTO omsReceivableDTO);

    /**
     * 通过收款单号获取收款单信息，包含收款明细
     * @param code
     * @return
     */
    OmsReceivable getOmsReceivable(String code);

    /**
     * 更新付款单
     * 关联更改费用明细
     * @param entity
     * @return
     */
    void update(OmsSettlementEditDTO entity);


    /**
     * 删除付款单
     * 删除付款单的同时，更新费明细状态
     * @param code
     */
    void removeByCode(String code);

    /**
     * 收款单审核
     * @param code 收款单号
     * @param status 审核状态 PASS通过。NO_PASS不通过
     * @param status 审核意见
     * @return
     */
    boolean approve(String code, PayableAndReceivableStatusEnum status, String verifyOpinion);
}
